{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基于DQAS算法的MNIST手写数字二分类问题  \n",
    "完成人: 杨建飞 2024.11.26\n",
    "## 开源实习任务介绍  \n",
    "量子线路的不同设计方式会严重影响到量子变分算法、量子神经网络等应用的效果，受到经典神经网络设计的启发，量子线路的自适应选取有望提高量子算法的效率和精度，本任务旨在构建一套量子线路结构搜索框架，可以自适应地完成量子线路设计并提高结果精度。需要设计一套自适应的程序框架，在给定量子门集合中自动选取最优的组合来实现目标量子算法。  \n",
    "要求基于MindQuantum==0.9框架，实现mnist数据集识别准确度比文献“https://doi.org/10.1016/j.neunet.2023.09.040”更高\n",
    "\n",
    "## DQAS 算法介绍  \n",
    "[DQAS算法[1]](https://arxiv.org/abs/2010.08561)是一种基于可微量子结构搜索的算法,将Ansatz的搜索过程分为了两个目标：结构搜索和参数搜索，并且在算法中进行同时优化，是一种双优化算法。首先需要预定义的是两个部分：**算符池(Operator Pool)**和**共享参数池(Shared Parameter Pool)**。算符池中存储的是预定义量子门，共享参数池中存储的是量子门参数。  \n",
    "### 算符池(Operator Pool)\n",
    "算符池中是预定义的量子线路片段，被称为“算符(Operator)”. 请注意算符可能是参数化的，也可能不是参数化的。在本项目中的预定义算符池成员如下：\n",
    "1. Rx(θ1)Ry(θ2)Rz(θ3)门\n",
    "2. CNOT门  \n",
    "\n",
    "需注意作用在不同的量子比特上可以视为不同的算符，因此当量子比特数目增加时，设计算符池存在困难。在本项目的实践过程中，采用了一种更加具有拓展性的算符池设计方式,被称为[Micro Search](https://proceedings.mlr.press/v202/wu23v/wu23v.pdf)，其核心思想是，只设计一个子线路(Sub Circuit),通过重复这个子线路的结构能够拼成一个完整线路。(仅仅是结构重复，变分参数并不相同)，示意图如下:  \n",
    "![图片alt](./asset/MicroSearch.png)\n",
    "\n",
    "### 共享参数池(Shared Parameter Pool)\n",
    "共享参数池中存储的是量子门参数，这些参数是共享的，也就是每次生成的Ansatz 会直接从共享参数池中的对应位置直接获取一个参数作为变分参数(这当然不是最优参数),绑定好后再进行损失值的测定。最后将会根据 loss 测定带来的梯度，更新对应参数池对应位置的参数。  \n",
    "尽管共享参数池的概念，不完全符合VQA算法找寻最优变分参数的惯例，但这样的设计方案大大降低了算法的运行时间和复杂度。到了后期共享参数池不断地被更新，且候选结构相对固定，便会接近有固定 ansatz 结构的VQA算法。 \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理部分  \n",
    "在本项目中对 MNIST 手写数字数据集中的\"3\"和\"6\"图片进行了PCA降维到8维, 同时将降维数据映射到[0,π]区间，并进行了归一化处理。  \n",
    "在量子线路中的 Data Encoding部分,采用了PCA数据+角度编码(8量子比特)的方式完成。\n",
    "此外，需要格外关注的一点是,MNIST手写数据集中\"3\"和\"6\"的个数总数为11446, 而DQAS只抽样使用了其中的10%，后续微调过程则在完整的数据集上实现。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torchvision import datasets\n",
    "from data_preprocessing import PCA_data_preprocessing\n",
    "mnist_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=None)\n",
    "#载入预处理、采样 10% 过后的的二分类认为训练和测试数据集\n",
    "X_train, X_test, y_train, y_test = PCA_data_preprocessing(mnist_dataset,8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/miniconda3/envs/MindSpore/lib/python3.9/site-packages/mindquantum/simulator/__init__.py:17: UserWarning: Unable import mqvector gpu backend due to: cannot import name '_mq_vector_gpu' from partially initialized module 'mindquantum' (most likely due to a circular import) (/opt/miniconda3/envs/MindSpore/lib/python3.9/site-packages/mindquantum/__init__.py)\n",
      "  from .available_simulator import SUPPORTED_SIMULATOR\n",
      "Please first ``pip install -U qiskit`` to enable related functionality in translation module\n"
     ]
    }
   ],
   "source": [
    "\n",
    "from mindquantum.core.parameterresolver import  PRGenerator\n",
    "import numpy as np\n",
    "from mindquantum.core.gates import RX, RY, RZ,X,I\n",
    "from mindquantum.core.circuit import UN\n",
    "import mindspore as ms\n",
    "import pickle\n",
    "from mindquantum.core.parameterresolver import PRGenerator\n",
    "from mindspore import ops\n",
    "import tensorcircuit as tc\n",
    "import tensorflow as tf\n",
    "pr_pool = PRGenerator('pool')\n",
    "\n",
    "#定义参数化算符池 加入I门填充空余比特 是为了方便后续操作\n",
    "parameterized_circuit= \\\n",
    "[\n",
    " UN(RX(pr_pool.new()),maps_obj=[0])+\\\n",
    " UN(RY(pr_pool.new()),maps_obj=[0])+\\\n",
    " UN(RZ(pr_pool.new()),maps_obj=[0])+I.on(1),\n",
    " UN(RX(pr_pool.new()),maps_obj=[1])+\\\n",
    " UN(RY(pr_pool.new()),maps_obj=[1])+\\\n",
    " UN(RZ(pr_pool.new()),maps_obj=[1])+I.on(0),]\n",
    "\n",
    "#定义非参数化算符池\n",
    "unparameterized_circuit = \\\n",
    "[UN(X,maps_obj=[0],maps_ctrl=[1]),\n",
    " UN(X,maps_obj=[1],maps_ctrl=[0]),\n",
    " ]\n",
    "ansatz_pr = PRGenerator('ansatz')\n",
    "shape_parametized = len(parameterized_circuit)\n",
    "shape_unparameterized = len(unparameterized_circuit)\n",
    "\n",
    "#设定具体的微观搜索中子线路的结构占位符个数\n",
    "num_layer=4\n",
    "shape_nnp = (7,num_layer,shape_parametized,3) #定义共享参数池的尺寸\n",
    "shape_stp = (num_layer,shape_unparameterized+shape_parametized) #定义结构参数的初始尺寸\n",
    "stddev = 0.03\n",
    "np.random.seed(2)\n",
    "nnp = np.random.normal(loc=0.0, scale=stddev, size=shape_nnp) #生成随机分布的共享参数池\n",
    "stp = np.random.normal(loc=0.0, scale=stddev, size=shape_stp) #生成随机分布的结构参数\n",
    "ops_onehot = ops.OneHot(axis=-1) #定义onehot编码算子"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 算符池的具体定义 \n",
    "查看算符池的各个成员"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"396.8\" height=\"140.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"396.8\" height=\"140.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"376.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"376.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><rect x=\"72.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"112.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool0 </text><rect x=\"172.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"212.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool1 </text><rect x=\"272.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"312.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool2 </text><rect x=\"72.8\" y=\"80.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"92.8\" y=\"100.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x315fc1550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"396.8\" height=\"140.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"396.8\" height=\"140.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"376.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"376.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><rect x=\"72.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"112.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool3 </text><rect x=\"172.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"212.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool4 </text><rect x=\"272.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"312.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool5 </text><rect x=\"72.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"92.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x329711f40>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"156.8\" height=\"128.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"156.8\" height=\"128.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"136.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"136.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><circle cx=\"92.8\" cy=\"100.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"72.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"78.8\" x2=\"106.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x315fc1760>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"156.8\" height=\"128.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"12.0\" width=\"156.8\" height=\"128.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"136.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"136.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><circle cx=\"92.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"72.8\" y=\"80.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"78.8\" x2=\"106.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"86.0\" y2=\"114.0\" stroke=\"#ffffff\" stroke-width=\"4\" /></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x31328cf70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for each_op in parameterized_circuit:\n",
    "    display(each_op.svg())\n",
    "for each_op in unparameterized_circuit:\n",
    "    display(each_op.svg())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始进行DQAS算法的迭代"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------epoch 0-----------\n",
      "batched平均损失:  0.89857846\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 1-----------\n",
      "batched平均损失:  0.8150909\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 2-----------\n",
      "batched平均损失:  0.7842525\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 3-----------\n",
      "batched平均损失:  0.77199715\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 4-----------\n",
      "batched平均损失:  0.7360642\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 5-----------\n",
      "batched平均损失:  0.70016533\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 6-----------\n",
      "batched平均损失:  0.7059648\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 7-----------\n",
      "batched平均损失:  0.69714254\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 8-----------\n",
      "batched平均损失:  0.65290815\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 9-----------\n",
      "batched平均损失:  0.6651093\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 10-----------\n",
      "batched平均损失:  0.62112176\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 11-----------\n",
      "batched平均损失:  0.64050263\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 12-----------\n",
      "batched平均损失:  0.6634721\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =64.797507788162% \n",
      "----------epoch 13-----------\n",
      "batched平均损失:  0.6306405\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =67.39356178608516% \n",
      "----------epoch 14-----------\n",
      "batched平均损失:  0.6677131\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =68.32814122533749% \n",
      "----------epoch 15-----------\n",
      "batched平均损失:  0.6556285\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =69.36656282450674% \n",
      "----------epoch 16-----------\n",
      "batched平均损失:  0.63411427\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =70.40498442367601% \n",
      "----------epoch 17-----------\n",
      "batched平均损失:  0.6241353\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =70.7165109034268% \n",
      "----------epoch 18-----------\n",
      "batched平均损失:  0.6251053\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =70.7165109034268% \n",
      "----------epoch 19-----------\n",
      "batched平均损失:  0.6095936\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =69.78193146417445% \n",
      "----------epoch 20-----------\n",
      "batched平均损失:  0.61133176\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =69.1588785046729% \n",
      "----------epoch 21-----------\n",
      "batched平均损失:  0.60952514\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =68.95119418483905% \n",
      "----------epoch 22-----------\n",
      "batched平均损失:  0.6094251\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =69.36656282450674% \n",
      "----------epoch 23-----------\n",
      "batched平均损失:  0.5990496\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =70.7165109034268% \n",
      "----------epoch 24-----------\n",
      "batched平均损失:  0.6069849\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =71.96261682242991% \n",
      "----------epoch 25-----------\n",
      "batched平均损失:  0.5827446\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =75.18172377985462% \n",
      "----------epoch 26-----------\n",
      "batched平均损失:  0.56947416\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =78.08930425752855% \n",
      "----------epoch 27-----------\n",
      "batched平均损失:  0.59616685\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =80.78920041536864% \n",
      "----------epoch 28-----------\n",
      "batched平均损失:  0.5629663\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =81.93146417445483% \n",
      "----------epoch 29-----------\n",
      "batched平均损失:  0.5637767\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =84.52751817237798% \n",
      "----------epoch 30-----------\n",
      "batched平均损失:  0.53868586\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =85.7736240913811% \n",
      "----------epoch 31-----------\n",
      "batched平均损失:  0.54417497\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =86.70820353063343% \n",
      "----------epoch 32-----------\n",
      "batched平均损失:  0.55238444\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =86.91588785046729% \n",
      "----------epoch 33-----------\n",
      "batched平均损失:  0.5230656\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.15784008307374% \n",
      "----------epoch 34-----------\n",
      "batched平均损失:  0.53159386\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 35-----------\n",
      "batched平均损失:  0.5051354\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.4693665628245% \n",
      "----------epoch 36-----------\n",
      "batched平均损失:  0.50062025\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 37-----------\n",
      "batched平均损失:  0.48900825\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.57320872274143% \n",
      "----------epoch 38-----------\n",
      "batched平均损失:  0.47075024\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.57320872274143% \n",
      "----------epoch 39-----------\n",
      "batched平均损失:  0.45985305\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.57320872274143% \n",
      "----------epoch 40-----------\n",
      "batched平均损失:  0.47166935\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 41-----------\n",
      "batched平均损失:  0.45712557\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 42-----------\n",
      "batched平均损失:  0.46527973\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 43-----------\n",
      "batched平均损失:  0.4506112\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.15784008307374% \n",
      "----------epoch 44-----------\n",
      "batched平均损失:  0.44171712\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 45-----------\n",
      "batched平均损失:  0.4444846\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.4693665628245% \n",
      "----------epoch 46-----------\n",
      "batched平均损失:  0.44452968\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 47-----------\n",
      "batched平均损失:  0.43621743\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 48-----------\n",
      "batched平均损失:  0.43709493\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.15784008307374% \n",
      "----------epoch 49-----------\n",
      "batched平均损失:  0.4283624\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.15784008307374% \n",
      "----------epoch 50-----------\n",
      "batched平均损失:  0.4196068\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.4693665628245% \n",
      "----------epoch 51-----------\n",
      "batched平均损失:  0.41895568\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.57320872274143% \n",
      "----------epoch 52-----------\n",
      "batched平均损失:  0.42519912\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 53-----------\n",
      "batched平均损失:  0.41227993\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.36552440290758% \n",
      "----------epoch 54-----------\n",
      "batched平均损失:  0.42201543\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 55-----------\n",
      "batched平均损失:  0.40598324\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.0539979231568% \n",
      "----------epoch 56-----------\n",
      "batched平均损失:  0.41214135\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.4693665628245% \n",
      "----------epoch 57-----------\n",
      "batched平均损失:  0.40624043\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 58-----------\n",
      "batched平均损失:  0.4017864\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 59-----------\n",
      "batched平均损失:  0.40166992\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.36552440290758% \n",
      "----------epoch 60-----------\n",
      "batched平均损失:  0.39893284\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.36552440290758% \n",
      "----------epoch 61-----------\n",
      "batched平均损失:  0.38846788\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.36552440290758% \n",
      "----------epoch 62-----------\n",
      "batched平均损失:  0.3896442\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 63-----------\n",
      "batched平均损失:  0.38069248\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 64-----------\n",
      "batched平均损失:  0.38235614\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 65-----------\n",
      "batched平均损失:  0.3872476\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 66-----------\n",
      "batched平均损失:  0.37837344\n",
      "最好的候选结构: [1 2 3 0]\n",
      "二分类准确率 Acc =96.67705088265835% \n",
      "----------epoch 67-----------\n",
      "batched平均损失:  0.37796867\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 68-----------\n",
      "batched平均损失:  0.3665261\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 69-----------\n",
      "batched平均损失:  0.3657273\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 70-----------\n",
      "batched平均损失:  0.35715294\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 71-----------\n",
      "batched平均损失:  0.35950062\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 72-----------\n",
      "batched平均损失:  0.36808857\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 73-----------\n",
      "batched平均损失:  0.34703463\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 74-----------\n",
      "batched平均损失:  0.34173122\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 75-----------\n",
      "batched平均损失:  0.34726444\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 76-----------\n",
      "batched平均损失:  0.34521168\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 77-----------\n",
      "batched平均损失:  0.33900243\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 78-----------\n",
      "batched平均损失:  0.33603057\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 79-----------\n",
      "batched平均损失:  0.33252922\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 80-----------\n",
      "batched平均损失:  0.33353314\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 81-----------\n",
      "batched平均损失:  0.3296441\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 82-----------\n",
      "batched平均损失:  0.32458937\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 83-----------\n",
      "batched平均损失:  0.32488617\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 84-----------\n",
      "batched平均损失:  0.32602942\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 85-----------\n",
      "batched平均损失:  0.32153443\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 86-----------\n",
      "batched平均损失:  0.32363263\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 87-----------\n",
      "batched平均损失:  0.32363194\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 88-----------\n",
      "batched平均损失:  0.3184222\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.78089304257529% \n",
      "----------epoch 89-----------\n",
      "batched平均损失:  0.31655514\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 90-----------\n",
      "batched平均损失:  0.31113803\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 91-----------\n",
      "batched平均损失:  0.31390813\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.88473520249221% \n",
      "----------epoch 92-----------\n",
      "batched平均损失:  0.30984852\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.98857736240913% \n",
      "----------epoch 93-----------\n",
      "batched平均损失:  0.3092932\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =96.98857736240913% \n",
      "----------epoch 94-----------\n",
      "batched平均损失:  0.3166665\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =97.09241952232607% \n",
      "----------epoch 95-----------\n",
      "batched平均损失:  0.31032348\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =97.09241952232607% \n",
      "----------epoch 96-----------\n",
      "batched平均损失:  0.30653623\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =97.09241952232607% \n",
      "----------epoch 97-----------\n",
      "batched平均损失:  0.31088322\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =97.09241952232607% \n",
      "----------epoch 98-----------\n",
      "batched平均损失:  0.30419385\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =97.09241952232607% \n",
      "----------epoch 99-----------\n",
      "batched平均损失:  0.3058895\n",
      "最好的候选结构: [1 1 3 0]\n",
      "二分类准确率 Acc =97.19626168224299% \n"
     ]
    }
   ],
   "source": [
    "from DQAS_tool import  sampling_from_structure,vag_nnp_micro_minipool,best_from_structure,zeroslike_grad_nnp_micro_minipool,nmf_gradient,DQAS_accuracy_custom,Mindspore_ansatz_micro_minipool,nnp_dealwith,TorchOptimizer,covert_ms2torch\n",
    "import torch\n",
    "\n",
    "K = tc.set_backend(\"tensorflow\")\n",
    "lr = tf.keras.optimizers.schedules.ExponentialDecay(0.06, 100, 0.5)\n",
    "structure_opt = tc.backend.optimizer(tf.keras.optimizers.Adam(0.1))\n",
    "network_opt = tc.backend.optimizer(tf.keras.optimizers.Adam(lr))\n",
    "verbose = False\n",
    "# 设置超参数\n",
    "epochs = 100\n",
    "batch_size=100\n",
    "avcost1 = 0\n",
    "ops_onehot = ops.OneHot(axis=-1)\n",
    "batch_loss_history=[] # 记录每个epoch的batch_size损失值\n",
    "structure_distribution_history=[] # 记录每个epoch的结构参数\n",
    "ansatz_params_history=[] # 记录每个epoch的网络参数\n",
    "best_candidates_history=[] # 记录每个epoch的最佳候选\n",
    "acc_history = [] #记录每个epoch的准确率\n",
    "\n",
    " \n",
    "for epoch in range(epochs):  # 更新结构参数的迭代\n",
    "    avcost2 = avcost1\n",
    "    costl = []\n",
    "    tmp = np.stack([sampling_from_structure(stp,num_layer,shape_parametized) for _ in range(batch_size)])\n",
    "    batch_structure = ops_onehot(ms.Tensor(tmp),shape_parametized+shape_unparameterized,ms.Tensor(1),ms.Tensor(0))\n",
    "    #print(batch_structure.shape)\n",
    "    # print(tmp,batch_structure)\n",
    "    loss_value = []\n",
    "    grad_nnps = []\n",
    "    grad_stps = []\n",
    "    \n",
    "    for i in batch_structure:\n",
    "        #print(ops.Argmax()(i))          \n",
    "        infd, grad_nnp = vag_nnp_micro_minipool(Structure_params=i,\n",
    "                                    Ansatz_params=nnp,\n",
    "                                    paramerterized_pool=parameterized_circuit,  unparamerterized_pool=unparameterized_circuit,\n",
    "                                    num_layer=num_layer,n_qbits=8)(ms.Tensor(X_train),ms.Tensor(y_train))\n",
    "        \n",
    "        grad_nnp_zeroslike = zeroslike_grad_nnp_micro_minipool(batch_sturcture=i,grad_nnp=grad_nnp[0],shape_parametized=shape_parametized,ansatz_parameters=nnp)\n",
    "        gs = nmf_gradient(structures=stp,oh=i,num_layer=num_layer,size_pool=stp.shape[1])\n",
    "        #print(infd,grad_nnp)\n",
    "        loss_value.append(infd)\n",
    "        grad_nnps.append(ms.Tensor(grad_nnp_zeroslike,dtype=ms.float64))\n",
    "        grad_stps.append(gs)\n",
    "\n",
    "      \n",
    "    infd = ops.stack(loss_value)\n",
    "    gnnp = ops.addn(grad_nnps)\n",
    "    gstp = [(infd[i] - avcost2) * grad_stps[i] for i in range(infd.shape[0])]\n",
    "    gstp_averge = ops.addn(gstp) / infd.shape[0]\n",
    "    avcost1 = sum(infd) / infd.shape[0]\n",
    "    # print(f'loss={infd}\\ngrad_nnp={gnnp}\\ngrandient_stp={gstp_averge}')\n",
    "    \n",
    "    gnnp_tf = tf.convert_to_tensor(gnnp.asnumpy(),dtype=tf.float64)\n",
    "    nnp_tf = tf.convert_to_tensor(nnp,dtype=tf.float64)\n",
    "    gstp_averge_tf = tf.convert_to_tensor(gstp_averge.reshape(stp.shape).asnumpy(),dtype=tf.float64)\n",
    "    stp_tf = tf.convert_to_tensor(stp,dtype=tf.float64)\n",
    "     # 更新一步参数\n",
    "    nnp_tf = network_opt.update(gnnp_tf, nnp_tf)\n",
    "    stp_tf = structure_opt.update(gstp_averge_tf, stp_tf) \n",
    "    \n",
    "    nnp = nnp_tf.numpy()\n",
    "    stp = stp_tf.numpy()\n",
    "\n",
    "    batch_loss_history.append(avcost1)\n",
    "    structure_distribution_history.append(stp)\n",
    "    ansatz_params_history.append(nnp)\n",
    "    #best_candidates_history.append(best_from_structure(cand_preset.asnumpy()))\n",
    "    cand_preset = best_from_structure(stp)\n",
    "    best_candidates_history.append(cand_preset.asnumpy())\n",
    "    \n",
    "\n",
    "    if epoch % 1 == 0 or epoch == epochs - 1:\n",
    "        print(\"----------epoch %s-----------\" % epoch)\n",
    "        print(\n",
    "            \"batched平均损失: \",\n",
    "            avcost1,\n",
    "        )\n",
    "    \n",
    "        if verbose:\n",
    "            print(\n",
    "                \"strcuture parameter: \\n\",\n",
    "                stp,\n",
    "                \"\\n network parameter: \\n\",\n",
    "                nnp,\n",
    "            )\n",
    "        \n",
    "        print(\"最好的候选结构:\",cand_preset)\n",
    "        stp_for_test = ops_onehot(ms.Tensor(cand_preset),shape_parametized+shape_unparameterized,ms.Tensor(1),ms.Tensor(0))\n",
    "\n",
    "        \n",
    "        if cand_preset.min() <shape_parametized:\n",
    "            ansatz_parameters = nnp_dealwith(Structure_params=stp_for_test,Network_params=nnp)\n",
    "            test_ansatz = Mindspore_ansatz_micro_minipool(Structure_p=stp_for_test,\n",
    "                                            parameterized_pool=parameterized_circuit,unparameterized_pool=unparameterized_circuit,\n",
    "                                            num_layer=num_layer,\n",
    "                                            n_qbits=8)\n",
    "            acc = DQAS_accuracy_custom(ansatz=test_ansatz,Network_params=ansatz_parameters,X=X_train,y=y_train,n_qbits=8)\n",
    "            acc_history.append(acc)\n",
    "            print(f'二分类准确率 Acc ={acc*100}% ')\n",
    "        \n",
    "        #我想每一轮结束 保存batch_loss_history、structure_distribution_history、ansatz_params_history、best_candidates_history、acc_history\n",
    "                # 保存数据\n",
    "        with open('training_history-minipool-k4-copy.pkl', 'wb') as f:\n",
    "            pickle.dump({\n",
    "                'batch_loss_history': batch_loss_history,\n",
    "                'structure_distribution_history': structure_distribution_history,\n",
    "                'ansatz_params_history': ansatz_params_history,\n",
    "                'best_candidates_history': best_candidates_history,\n",
    "                'acc_history': acc_history\n",
    "            }, f)\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 目前已经可以得到了最终的Ansatz,[1,1,3,0],其对应的量子线路如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#加载\n",
    "with open('./training_history-minipool-k4-copy.pkl', 'rb') as f:\n",
    "    history = pickle.load(f)\n",
    "    batch_loss_history = history['batch_loss_history']\n",
    "    structure_distribution_history = history['structure_distribution_history']\n",
    "    ansatz_params_history = history['ansatz_params_history']\n",
    "    best_candidates_history = history['best_candidates_history']\n",
    "    acc_history = history['acc_history']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"3076.8\" height=\"500.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"3076.8\" height=\"500.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><text x=\"20.0\" y=\"160.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q2: </text><text x=\"20.0\" y=\"220.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q3: </text><text x=\"20.0\" y=\"280.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q4: </text><text x=\"20.0\" y=\"340.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q5: </text><text x=\"20.0\" y=\"400.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q6: </text><text x=\"20.0\" y=\"460.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q7: </text><line x1=\"48.8\" x2=\"3056.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"160.0\" y2=\"160.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"220.0\" y2=\"220.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"340.0\" y2=\"340.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"400.0\" y2=\"400.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"3056.8\" y1=\"460.0\" y2=\"460.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><rect x=\"72.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder0 </text><rect x=\"72.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder1 </text><rect x=\"72.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder2 </text><rect x=\"72.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder3 </text><rect x=\"72.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder4 </text><rect x=\"72.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder5 </text><rect x=\"72.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder6 </text><rect x=\"72.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder7 </text><rect x=\"172.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"212.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz0 </text><rect x=\"272.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"312.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz1 </text><rect x=\"372.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"412.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"412.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz2 </text><rect x=\"172.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"192.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"472.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"512.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"512.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz3 </text><rect x=\"572.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"612.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"612.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz4 </text><rect x=\"672.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"712.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"712.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz5 </text><rect x=\"232.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"252.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"792.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"772.8\" y=\"80.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"778.8\" x2=\"806.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"86.0\" y2=\"114.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"832.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"872.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"872.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz6 </text><rect x=\"932.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"972.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"972.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz7 </text><rect x=\"1032.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1072.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1072.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz8 </text><rect x=\"832.8\" y=\"80.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"852.8\" y=\"100.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"172.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"212.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz9 </text><rect x=\"272.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"312.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz10 </text><rect x=\"372.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"412.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"412.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz11 </text><rect x=\"172.8\" y=\"140.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"192.8\" y=\"160.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"472.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"512.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"512.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz12 </text><rect x=\"572.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"612.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"612.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz13 </text><rect x=\"672.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"712.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"712.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz14 </text><rect x=\"232.8\" y=\"140.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"252.8\" y=\"160.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"792.8\" cy=\"160.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"160.0\" y2=\"220.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"772.8\" y=\"200.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"778.8\" x2=\"806.8\" y1=\"220.0\" y2=\"220.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"206.0\" y2=\"234.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"832.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"872.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"872.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz15 </text><rect x=\"932.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"972.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"972.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz16 </text><rect x=\"1032.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1072.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1072.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz17 </text><rect x=\"832.8\" y=\"200.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"852.8\" y=\"220.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"172.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"212.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz18 </text><rect x=\"272.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"312.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz19 </text><rect x=\"372.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"412.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"412.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz20 </text><rect x=\"172.8\" y=\"260.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"192.8\" y=\"280.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"472.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"512.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"512.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz21 </text><rect x=\"572.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"612.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"612.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz22 </text><rect x=\"672.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"712.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"712.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz23 </text><rect x=\"232.8\" y=\"260.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"252.8\" y=\"280.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"792.8\" cy=\"280.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"280.0\" y2=\"340.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"772.8\" y=\"320.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"778.8\" x2=\"806.8\" y1=\"340.0\" y2=\"340.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"326.0\" y2=\"354.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"832.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"872.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"872.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz24 </text><rect x=\"932.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"972.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"972.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz25 </text><rect x=\"1032.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1072.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1072.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz26 </text><rect x=\"832.8\" y=\"320.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"852.8\" y=\"340.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"172.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"212.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz27 </text><rect x=\"272.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"312.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz28 </text><rect x=\"372.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"412.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"412.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz29 </text><rect x=\"172.8\" y=\"380.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"192.8\" y=\"400.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"472.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"512.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"512.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz30 </text><rect x=\"572.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"612.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"612.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz31 </text><rect x=\"672.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"712.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"712.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz32 </text><rect x=\"232.8\" y=\"380.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"252.8\" y=\"400.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"792.8\" cy=\"400.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"400.0\" y2=\"460.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"772.8\" y=\"440.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"778.8\" x2=\"806.8\" y1=\"460.0\" y2=\"460.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"446.0\" y2=\"474.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"832.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"872.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"872.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz33 </text><rect x=\"932.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"972.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"972.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz34 </text><rect x=\"1032.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1072.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1072.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz35 </text><rect x=\"832.8\" y=\"440.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"852.8\" y=\"460.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"1132.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1172.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1172.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz36 </text><rect x=\"1232.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1272.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1272.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz37 </text><rect x=\"1332.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1372.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1372.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz38 </text><rect x=\"1132.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1152.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"1432.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1472.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1472.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz39 </text><rect x=\"1532.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1572.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1572.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz40 </text><rect x=\"1632.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1672.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1672.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz41 </text><rect x=\"1192.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1212.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"1752.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"1752.8\" x2=\"1752.8\" y1=\"40.0\" y2=\"160.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"1732.8\" y=\"140.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"1738.8\" x2=\"1766.8\" y1=\"160.0\" y2=\"160.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"1752.8\" x2=\"1752.8\" y1=\"146.0\" y2=\"174.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"1792.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1832.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1832.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz42 </text><rect x=\"1892.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1932.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1932.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz43 </text><rect x=\"1992.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2032.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"2032.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz44 </text><rect x=\"1792.8\" y=\"140.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1812.8\" y=\"160.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"1132.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1172.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1172.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz45 </text><rect x=\"1232.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1272.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1272.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz46 </text><rect x=\"1332.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1372.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1372.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz47 </text><rect x=\"1132.8\" y=\"260.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1152.8\" y=\"280.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"1432.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1472.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1472.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz48 </text><rect x=\"1532.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1572.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1572.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz49 </text><rect x=\"1632.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1672.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1672.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz50 </text><rect x=\"1192.8\" y=\"260.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1212.8\" y=\"280.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"1752.8\" cy=\"280.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"1752.8\" x2=\"1752.8\" y1=\"280.0\" y2=\"400.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"1732.8\" y=\"380.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"1738.8\" x2=\"1766.8\" y1=\"400.0\" y2=\"400.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"1752.8\" x2=\"1752.8\" y1=\"386.0\" y2=\"414.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"1792.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1832.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1832.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz51 </text><rect x=\"1892.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1932.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1932.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz52 </text><rect x=\"1992.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2032.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"2032.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz53 </text><rect x=\"1792.8\" y=\"380.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1812.8\" y=\"400.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"2092.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2132.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"2132.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz54 </text><rect x=\"2192.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2232.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"2232.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz55 </text><rect x=\"2292.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2332.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"2332.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz56 </text><rect x=\"2092.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"2112.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><rect x=\"2392.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2432.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"2432.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz57 </text><rect x=\"2492.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2532.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"2532.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz58 </text><rect x=\"2592.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2632.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"2632.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz59 </text><rect x=\"2152.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"2172.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"2712.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"2712.8\" x2=\"2712.8\" y1=\"40.0\" y2=\"280.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"2692.8\" y=\"260.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"2698.8\" x2=\"2726.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"2712.8\" x2=\"2712.8\" y1=\"266.0\" y2=\"294.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"2752.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2792.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"2792.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz60 </text><rect x=\"2852.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2892.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"2892.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz61 </text><rect x=\"2952.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"2992.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"2992.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz62 </text><rect x=\"2752.8\" y=\"260.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"2772.8\" y=\"280.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x8512c0c70>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stp_for_test = ops_onehot(ms.Tensor(best_candidates_history[-1]),shape_parametized+shape_unparameterized,ms.Tensor(1),ms.Tensor(0))\n",
    "ansatz = Mindspore_ansatz_micro_minipool(Structure_p=stp_for_test,parameterized_pool=parameterized_circuit,unparameterized_pool=unparameterized_circuit,num_layer=num_layer,n_qbits=8)\n",
    "ansatz.svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from DQAS_tool import  nnp_dealwith\n",
    "nnp = ansatz_params_history[-1]\n",
    "nnp_finnal = nnp_dealwith(Structure_params=stp_for_test,Network_params=nnp,shape_parameterized=shape_parametized)\n",
    "np.save('最终ansatz变分参数.npy', nnp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化训练过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAMWCAYAAAAH8wnbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC19ElEQVR4nOzdd3gU5d7G8e/upvdASAECofdeIkVBjdJEVFREFMTCEcGGDSyAepRj46CIoB4FXkVBBBUREYiAIghIk9B7QkkD0kndef+IWVmTQIAkm3J/rmsvktlnZn4zAfbOM888YzIMw0BERERELsrs6AJEREREKgsFJxEREZESUnASERERKSEFJxEREZESUnASERERKSEFJxEREZESUnASERERKSEFJxEREZESUnASERERKSEFJxEpd3PmzMFkMvHHH384upQK5ejRo5hMJubMmePoUkSkGApOIlVcQUg5/xUYGMi1117Ljz/+eNnbff311/n2229Lr9BLMHnyZEwmE4mJiQ7Zf0ndd999eHl5Ffu+yWRi7NixV7yfDz74QGFLpJw4OboAESkfr7zyCg0aNMAwDOLi4pgzZw79+/fn+++/56abbrrk7b3++uvcfvvt3HLLLaVfbDVVv359zp07h7Oz8yWt98EHHxAQEMB9991XNoWJiI2Ck0g10a9fPzp37mz7/oEHHiAoKIgvv/zysoKTlD6TyYSbm5ujywAgMzMTFxcXzGZdmBA5n/5FiFRTfn5+uLu74+Rk//vT22+/Tffu3alZsybu7u506tSJr7/+2q6NyWQiPT2duXPn2i7/nd/bceLECR544AFq166Nq6srDRo0YPTo0WRnZ9ttJysri3HjxlGrVi08PT259dZbSUhIKLVj/Pnnn7n66qvx9PTEz8+PQYMGsWfPHrs2qampPPHEE4SFheHq6kpgYCA33HADW7dutbU5cOAAgwcPJjg4GDc3N+rWrctdd91FcnJyqdUKRY9xio2NZeTIkdStWxdXV1dCQkIYNGgQR48eBSAsLIxdu3axdu1a28+id+/etvUPHz7MHXfcQY0aNfDw8OCqq67ihx9+sNvvmjVrMJlMzJ8/nxdffJE6derg4eHB9u3bMZlM/Pe//y1U6/r16zGZTHz55Zeleg5EKjr1OIlUE8nJySQmJmIYBvHx8UyfPp20tDTuueceu3bvvvsuN998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q57//Oc/mEwmnnjiCdsynfOyceLECe655x5q1qyJu7s7bdq04Y8//rC9bxgGEydOJCQkBHd3dyIiIjhw4IADK6788vLyeOmll2jQoAHu7u40atSIV1991e75ZjrvV+6XX35h4MCB1K5dG5PJxLfffmv3fknO8ZkzZxg2bBg+Pj74+fnxwAMPkJaWVir1KTiVowULFjBu3DgmTZrE1q1badeuHX369CE+Pt7RpVUJa9euZcyYMfz++++sXLmSnJwcbrzxRtLT021tnnzySb7//nsWLlzI2rVrOXnyJLfddpsDq646Nm/ezIcffkjbtm3tluucl76zZ8/So0cPnJ2d+fHHH9m9ezfvvPMO/v7+tjZvvvkm7733HrNmzWLjxo14enrSp08fMjMzHVh55fbGG28wc+ZM3n//ffbs2cMbb7zBm2++yfTp021tdN6vXHp6Ou3atWPGjBlFvl+Sczxs2DB27drFypUrWbp0Kb/88gujRo0qnQINKTddu3Y1xowZY/s+Ly/PqF27tjFlyhQHVlV1xcfHG4Cxdu1awzAMIykpyXB2djYWLlxoa7Nnzx4DMDZs2OCoMquE1NRUo0mTJsbKlSuNXr16GY8//rhhGDrnZeW5554zevbsWez7VqvVCA4ONt566y3bsqSkJMPV1dX48ssvy6PEKmnAgAHG/fffb7fstttuM4YNG2YYhs57WQCMb775xvZ9Sc7x7t27DcDYvHmzrc2PP/5omEwm48SJE1dck3qcykl2djZbtmwhIiLCtsxsNhMREcGGDRscWFnVlZycDECNGjUA2LJlCzk5OXY/g+bNm1OvXj39DK7QmDFjGDBggN25BZ3zsrJkyRI6d+7MHXfcQWBgIB06dODjjz+2vX/kyBFiY2Ptzruvry/h4eE671ege/fuREZGsn//fgB27NjBunXr6NevH6DzXh5Kco43bNiAn58fnTt3trWJiIjAbDazcePGK65BD/ktJ4mJieTl5REUFGS3PCgoiL179zqoqqrLarXyxBNP0KNHD1q3bg1AbGwsLi4u+Pn52bUNCgoiNjbWAVVWDfPnz2fr1q1s3ry50Hs652Xj8OHDzJw5k3HjxvH888+zefNmHnvsMVxcXBgxYoTt3Bb1/43O++UbP348KSkpNG/eHIvFQl5eHq+99hrDhg0D0HkvByU5x7GxsQQGBtq97+TkRI0aNUrl56DgJFXSmDFjiIqKYt26dY4upUqLiYnh8ccfZ+XKlbi5uTm6nGrDarXSuXNnXn/9dQA6dOhAVFQUs2bNYsSIEQ6urur66quvmDdvHl988QWtWrVi+/btPPHEE9SuXVvnvRrRpbpyEhAQgMViKXQ3UVxcHMHBwQ6qqmoaO3YsS5cuZfXq1dStW9e2PDg4mOzsbJKSkuza62dw+bZs2UJ8fDwdO3bEyckJJycn1q5dy3vvvYeTkxNBQUE652UgJCSEli1b2i1r0aIF0dHRALZzq/9vStczzzzD+PHjueuuu2jTpg333nsvTz75JFOmTAF03stDSc5xcHBwoZuucnNzOXPmTKn8HBScyomLiwudOnUiMjLStsxqtRIZGUm3bt0cWFnVYRgGY8eO5ZtvvuHnn3+mQYMGdu936tQJZ2dnu5/Bvn37iI6O1s/gMl1//fXs3LmT7du3216dO3dm2LBhtq91zktfjx49Ck21sX//furXrw9AgwYNCA4OtjvvKSkpbNy4Uef9CmRkZGA2239sWiwWrFYroPNeHkpyjrt160ZSUhJbtmyxtfn555+xWq2Eh4dfeRFXPLxcSmz+/PmGq6urMWfOHGP37t3GqFGjDD8/PyM2NtbRpVUJo0ePNnx9fY01a9YYp06dsr0yMjJsbR5++GGjXr16xs8//2z88ccfRrdu3Yxu3bo5sOqq5/y76gxD57wsbNq0yXBycjJee+0148CBA8a8efMMDw8P4/PPP7e1+c9//mP4+fkZ3333nfHnn38agwYNMho0aGCcO3fOgZVXbiNGjDDq1KljLF261Dhy5IixePFiIyAgwHj22WdtbXTer1xqaqqxbds2Y9u2bQZgTJ061di2bZtx7NgxwzBKdo779u1rdOjQwdi4caOxbt06o0mTJsbQoUNLpT4Fp3I2ffp0o169eoaLi4vRtWtX4/fff3d0SVUGUORr9uzZtjbnzp0zHnnkEcPf39/w8PAwbr31VuPUqVOOK7oK+mdw0jkvG99//73RunVrw9XV1WjevLnx0Ucf2b1vtVqNl156yQgKCjJcXV2N66+/3ti3b5+Dqq0aUlJSjMcff9yoV6+e4ebmZjRs2NB44YUXjKysLFsbnfcrt3r16iL/Lx8xYoRhGCU7x6dPnzaGDh1qeHl5GT4+PsbIkSON1NTUUqnPZBjnTXkqIiIiIsXSGCcRERGRElJwEhERESkhBScRERGRElJwEhERESkhBScRERGRElJwEhERESkhBScRERGRElJwEhERESkhBScRkStkMpn49ttvHV2GiJQDBScRqdTuu+8+TCZToVffvn0dXZqIVEFOji5ARORK9e3bl9mzZ9stc3V1dVA1IlKVqcdJRCo9V1dXgoOD7V7+/v5A/mW0mTNn0q9fP9zd3WnYsCFff/213fo7d+7kuuuuw93dnZo1azJq1CjS0tLs2nz66ae0atUKV1dXQkJCGDt2rN37iYmJ3HrrrXh4eNCkSROWLFlStgctIg6h4CQiVd5LL73E4MGD2bFjB8OGDeOuu+5iz549AKSnp9OnTx/8/f3ZvHkzCxcuZNWqVXbBaObMmYwZM4ZRo0axc+dOlixZQuPGje328fLLL3PnnXfy559/0r9/f4YNG8aZM2fK9ThFpBwYIiKV2IgRIwyLxWJ4enravV577TXDMAwDMB5++GG7dcLDw43Ro0cbhmEYH330keHv72+kpaXZ3v/hhx8Ms9lsxMbGGoZhGLVr1zZeeOGFYmsAjBdffNH2fVpamgEYP/74Y6kdp4hUDBrjJCKV3rXXXsvMmTPtltWoUcP2dbdu3eze69atG9u3bwdgz549tGvXDk9PT9v7PXr0wGq1sm/fPkwmEydPnuT666+/YA1t27a1fe3p6YmPjw/x8fGXe0giUkEpOIlIpefp6Vno0llpcXd3L1E7Z2dnu+9NJhNWq7UsShIRB9IYJxGp8n7//fdC37do0QKAFi1asGPHDtLT023v//bbb5jNZpo1a4a3tzdhYWFERkaWa80iUjGpx0lEKr2srCxiY2Ptljk5OREQEADAwoUL6dy5Mz179mTevHls2rSJTz75BIBhw4YxadIkRowYweTJk0lISODRRx/l3nvvJSgoCIDJkyfz8MMPExgYSL9+/UhNTeW3337j0UcfLd8DFRGHU3ASkUpv+fLlhISE2C1r1qwZe/fuBfLveJs/fz6PPPIIISEhfPnll7Rs2RIADw8PfvrpJx5//HG6dOmCh4cHgwcPZurUqbZtjRgxgszMTP773//y9NNPExAQwO23315+BygiFYbJMAzD0UWIiJQVk8nEN998wy233OLoUkSkCtAYJxEREZESUnASERERKSGNcRKRKk2jEUSkNKnHSURERKSEFJxERERESkjBSURERKSEFJxERERESkjBSURERKSEFJxERERESkjBSURERKSEFJxERERESkjBSURERKSEFJxERERESkjBSURERKSEFJxERERESkjBSURERKSEFJxERMpZ79696d27t6PLEJHLoOAkIgB88MEHmEwmwsPDHV1KpbJmzRpMJhNff/11ke/fd999eHl5XfF+1q9fz+TJk0lKSrribYnI5VNwEhEA5s2bR1hYGJs2beLgwYOOLqdKW7FiBStWrLikddavX8/LL7+s4CTiYApOIsKRI0dYv349U6dOpVatWsybN8/RJRUrPT3d0SVcMRcXF1xcXBxdBoZhcO7cOUeXIVKpKDiJCPPmzcPf358BAwZw++23FxuckpKSePLJJwkLC8PV1ZW6desyfPhwEhMTbW0yMzOZPHkyTZs2xc3NjZCQEG677TYOHToE/H1pa82aNXbbPnr0KCaTiTlz5tiWFVzmOnToEP3798fb25thw4YB8Ouvv3LHHXdQr149XF1dCQ0N5cknnywyCOzdu5c777yTWrVq4e7uTrNmzXjhhRcAWL16NSaTiW+++abQel988QUmk4kNGzZc0vm8mKLGOE2fPp1WrVrh4eGBv78/nTt35osvvgBg8uTJPPPMMwA0aNAAk8mEyWTi6NGjAOTm5vLqq6/SqFEjXF1dCQsL4/nnnycrK8tuH2FhYdx000389NNPdO7cGXd3dz788EN69epFu3btiqy1WbNm9OnTp1SPX6Qyc3J0ASLiePPmzeO2227DxcWFoUOHMnPmTDZv3kyXLl1sbdLS0rj66qvZs2cP999/Px07diQxMZElS5Zw/PhxAgICyMvL46abbiIyMpK77rqLxx9/nNTUVFauXElUVBSNGjW65Npyc3Pp06cPPXv25O2338bDwwOAhQsXkpGRwejRo6lZsyabNm1i+vTpHD9+nIULF9rW//PPP7n66qtxdnZm1KhRhIWFcejQIb7//ntee+01evfuTWhoKPPmzePWW28tdF4aNWpEt27dLlpnamqqXYAs8M/wUpSPP/6Yxx57jNtvv53HH3+czMxM/vzzTzZu3Mjdd9/Nbbfdxv79+/nyyy/573//S0BAAAC1atUC4MEHH2Tu3LncfvvtPPXUU2zcuJEpU6awZ8+eQoFw3759DB06lH/961889NBDNGvWDC8vLx566CGioqJo3bq1re3mzZvZv38/L7744kWPQaTaMESkWvvjjz8MwFi5cqVhGIZhtVqNunXrGo8//rhdu4kTJxqAsXjx4kLbsFqthmEYxqeffmoAxtSpU4tts3r1agMwVq9ebff+kSNHDMCYPXu2bdmIESMMwBg/fnyh7WVkZBRaNmXKFMNkMhnHjh2zLbvmmmsMb29vu2Xn12MYhjFhwgTD1dXVSEpKsi2Lj483nJycjEmTJhXaz/kKjudCL09PT7t1evXqZfTq1cv2/aBBg4xWrVpdcD9vvfWWARhHjhyxW759+3YDMB588EG75U8//bQBGD///LNtWf369Q3AWL58uV3bpKQkw83NzXjuuefslj/22GOGp6enkZaWdsHaRKoTXaoTqebmzZtHUFAQ1157LQAmk4khQ4Ywf/588vLybO0WLVpEu3btCvXKFKxT0CYgIIBHH3202DaXY/To0YWWubu7275OT08nMTGR7t27YxgG27ZtAyAhIYFffvmF+++/n3r16hVbz/Dhw8nKyrK7M27BggXk5uZyzz33lKjGiRMnsnLlykKvG2+88aLr+vn5cfz4cTZv3lyifZ1v2bJlAIwbN85u+VNPPQXADz/8YLe8QYMGhS69+fr6MmjQIL788ksMwwAgLy+PBQsWcMstt+Dp6XnJdYlUVQpOItVYXl4e8+fP59prr+XIkSMcPHiQgwcPEh4eTlxcHJGRkba2hw4dsruMU5RDhw7RrFkznJxKbxSAk5MTdevWLbQ8Ojqa++67jxo1auDl5UWtWrXo1asXAMnJyQAcPnwY4KJ1N2/enC5dutiN7Zo3bx5XXXUVjRs3LlGdbdq0ISIiotArJCTkous+99xzeHl50bVrV5o0acKYMWP47bffSrTfY8eOYTabC9UZHByMn58fx44ds1veoEGDIrczfPhwoqOj+fXXXwFYtWoVcXFx3HvvvSWqQ6S6UHASqcZ+/vlnTp06xfz582nSpIntdeeddwKUyd11xfU8nd+7dT5XV1fMZnOhtjfccAM//PADzz33HN9++y0rV660DSy3Wq2XXNfw4cNZu3Ytx48f59ChQ/z+++8l7m26Ui1atGDfvn3Mnz+fnj17smjRInr27MmkSZNKvI2S9uid31N3vj59+hAUFMTnn38OwOeff05wcDARERElrkGkOtDgcJFqbN68eQQGBjJjxoxC7y1evJhvvvmGWbNm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WFjI0qVLHXWys7P56quvGDRoUJmd06VoHSczHP8JCs+CdwjUaGh2NCIi5afwDHzqWvJQZh46DZ4BJa6elJTEI488AkDXrl3Jyclh1apVdOrUCYBJkybRu3dvXnnlFccxzZs3B+Dnn3/m008/Zfny5SQkJABQr149l0MuKChg3rx5hIeHO8p69OjhVGfOnDmEh4ezfft2mjZtyvz58zly5Ajr168nJCQEgJtuuslRf/DgwTz++ONMnz4dHx8fNm3axNatW/nnP/95xVjee+89PvzwQ6eyCxcuXHYNpNzcXHJycrjvvvu48cYbAWjUqJHj/WrVquHp6UlUVJSjbPny5WzdupW9e/dSq1YtAObNm0eTJk1Yv349bdq0uezv5eGHHyY5OZmePXsC8PHHH1O7dm1Hf5UX00ec3n33XWJjY/H19SU+Pp60tLQr1j958iTDhw8nOjoaHx8fbr75Zr7++mvH+y+//LJjGLBoa9jQzZITx/ym9vZVw0VExFQZGRmkpaXRp08fADw9PenVq5fjUhtAeno6nTt3vuTx6enpWK1WOnbseE1x1KlTxyk5ANi1axd9+vShXr161KhRg9jYWMB+iavos1u2bOlImv5bYmIiVquVxYsXA/bLhrfffrujncvp27cv6enpTturr7562fohISEMGDCALl260K1bN/72t79x+PDhK37Gjh07qFWrliNpAmjcuDFBQUHs2LHDUXap38uQIUP49ttvOXjwoOO8BgwYUO4r1Zs64pSSksLo0aOZPXs28fHxzJgxgy5dupCRkUFERESx+gUFBdx5551ERETw2WefUbNmTX777bdi142bNGnCd9995/jZ09PNBtY0MVxEqgqrv33kx6zPLqGkpCQuXLhATEyMo8wwDHx8fHjnnXcIDAzEz8/vssdf6T2wL75o/Nelw/PnzxerFxBQfISsW7du1KlThw8++ICYmBhsNhtNmzZ1TJK+2md7e3vTr18/kpOTeeCBB5g/fz5/+9vfrngMQGBgoNPIFXDJ7+aLJScn89RTT7Fs2TJSUlIYN24cy5cv59Zbr+2xYpf6vbRs2ZLmzZszb9487rrrLv7973/z1VdfXdPnlISpwx3Tp09nyJAhDBw4kMaNGzN79mz8/f2ZM2fOJevPmTOH48ePs2TJEtq3b09sbCwdO3Z0DJUWKRoKLNrCwsIq4nRKxjAu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fhlt1qxZ3H333fj5+VGvXj0+++wzp+O3bt3KHXfcgZ+fH6GhoQwdOpTTp0871ZkzZw5NmjTBx8eH6OhonnzySaf3jx49Svfu3fH396d+/fosXbq0fE9aREyhxElErnvjx4+nR48ebN68mb59+9K7d2927NgBQF5eHl26dCE4OJj169ezaNEivvvuO6fEaNasWQwfPpyhQ4eydetWli5dyk033eT0Ga+88goPPfQQW7Zs4Z577qFv374cP368Qs9TRCqAISJSifXv39+wWq1GQECA0zZp0iTDMAwDMB5//HGnY+Lj441hw4YZhmEY77//vhEcHGycPn3a8f5XX31leHh4GJmZmYZhGEZMTIzx0ksvXTYGwBg3bpzj59OnTxuA8c0335TZeYqIe9AcJxGp9G6//XZmzZrlVBYSEuLYb9eundN77dq1Iz09HYAdO3bQvHlzAgICHO+3b98em81GRkYGFouFQ4cO0blz5yvG0KxZM8d+QEAANWrUIDs7u7SnJCJuSomTiFR6AQEBxS6dlRU/P78S1fPy8nL62WKxYLPZyiMkETGR5jiJyHVv7dq1xX5u1KgRAI0aNWLz5s3k5eU53v/hhx/w8PCgQYMGVK9endjYWFJTUys0ZhFxTxpxEpFKLz8/n8zMTKcyT09PwsLCAFi0aBGtW7emQ4cOfPLJJ6SlpZGUlARA3759mThxIv379+fll1/myJEjjBgxgkcffZTIyEgAXn75ZR5//HEiIiK4++67OXXqFD/88AMjRoyo2BMVEdMpcRKRSm/ZsmVER0c7lTVo0ICdO3cC9jveFi5cyBNPPEF0dDQLFiygcePGAPj7+/Ovf/2LkSNH0qZNG/z9/enRowfTp093tNW/f3/OnTvHW2+9xbPPPktYWBgPPvhgxZ2giLgNi2EYhtlBiIiUF4vFwuLFi0lMTDQ7FBG5DmiOk4iIiEgJKXESERERKSHNcRKR65pmI4hIWdKIk4iIiEgJKXESERERKSElTiIiIiIlpMRJREREpISUOImIiIiUkBInERERkRJS4iQiIiJSQkqcREREREpIiZOIiIhICf0//LbdEPWR1/YAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 600x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6, 8))\n",
    "# 绘制第一个子图\n",
    "ax1.plot(range(len(batch_loss_history)), batch_loss_history, label='Batch Loss History')\n",
    "ax1.set_title('Batch Loss History')\n",
    "ax1.set_xlabel('Epoch')\n",
    "ax1.set_ylabel('Loss')\n",
    "ax1.legend()\n",
    "# ax1.grid(True)\n",
    "\n",
    "# 绘制第二个子图\n",
    "ax2.plot(range(len(acc_history)), acc_history, label='Accuracy History', color='orange')\n",
    "ax2.set_title('Accuracy History')\n",
    "ax2.set_xlabel('Epoch')\n",
    "ax2.set_ylabel('Accuracy')\n",
    "ax2.legend()\n",
    "# ax2.grid(True)\n",
    "\n",
    "# 调整布局\n",
    "plt.tight_layout()\n",
    "# 显示图形\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "在完整的数据集(11446)上的精度为:97.47510047178054%\n"
     ]
    }
   ],
   "source": [
    "from data_preprocessing import X_full,y_full\n",
    "acc = DQAS_accuracy_custom(ansatz=ansatz,Network_params=nnp_finnal,X=X_full,y=y_full,n_qbits=8)\n",
    "print(f'在完整的数据集(11446)上的精度为:{acc*100}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最终在完整数据集上的精度为 97.4%+ 经过进一步微调可以更高 已经达到验收要求！"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "MindSpore",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
